function ajax(time){
  return new Promise((reslove,reject)=>{
    setTimeout(()=>{
      if(time>5000){
        reject()
      }
      reslove()
    },time)
  })
}
class Limit{
    constructor(partindex=2){
        this.tasks=[]
        this.partindex=partindex
        this.runpartindex=0
    }
    add(task){
       return new Promise((reslove,reject)=>{
            this.tasks.push({
            task,
            reslove,
            reject
        })
        this._run()
        })          
    }
    _run(){
        if(this.runpartindex<this.partindex && this.tasks.length){
          const{task,reslove,reject}=this.tasks.shift()
          this.runpartindex++
          task().then(reslove,reject).finally(()=>{
            this.runpartindex--
            this._run()
          })
        }
    }
}

const limit=new Limit(2)

function addTask(time,name){
       limit
       .add(()=>ajax(time))
       .then(()=>{console.log(`任务${name}完成`)})
       .catch(()=>{console.log(`任务${name}失败`)})
}







addTask(10000,1)
addTask(4000,2)
addTask(2000,3)
addTask(7000,4)
addTask(1000,5)
